#ifndef _BIND_H_
#define _BIND_H_

class CBind
{
public:
	enum
	{
		KEY_NONE = 0,

		KEY_ESC,

		KEY_F1,
		KEY_F2,
		KEY_F3,
		KEY_F4,
		KEY_F5,
		KEY_F6,
		KEY_F7,
		KEY_F8,
		KEY_F9,
		KEY_F10,
		KEY_F11,
		KEY_F12,

		KEY_INS,
		KEY_DEL,
		KEY_HOME,
		KEY_END,
		KEY_PGUP,
		KEY_PGDN,

		KEY_TILDE,
		KEY_MINUS,
		KEY_PLUS,
		KEY_BKSP,
		KEY_TAB,
		KEY_LBRK,
		KEY_RBRK,
		KEY_BSLASAH,
		KEY_CAPS,
		KEY_COLON,
		KEY_QUOTE,
		KEY_ENTER,
		KEY_LSHIFT,
		KEY_RSHIFT,
		KEY_COMMA,
		KEY_PEROD,
		KEY_SLASH,
		KEY_LCTRL,
		KEY_RCTRL,
		KEY_LALT,
		KEY_RALT,

		KEY_UP,
		KEY_DOWN,
		KEY_LEFT,
		KEY_RIGHT,


		KEY_0 = '0',
		KEY_1,
		KEY_2,
		KEY_3,
		KEY_4,
		KEY_5,
		KEY_6,
		KEY_7,
		KEY_8,
		KEY_9,

		KEY_A = 'A',
		KEY_B,
		KEY_C,
		KEY_D,
		KEY_E,
		KEY_F,
		KEY_G,
		KEY_H,
		KEY_I,
		KEY_J,
		KEY_K,
		KEY_L,
		KEY_M,
		KEY_N,
		KEY_O,
		KEY_P,
		KEY_Q,
		KEY_R,
		KEY_S,
		KEY_T,
		KEY_U,
		KEY_V,
		KEY_W,
		KEY_X,
		KEY_Y,
		KEY_Z,

		KEY_COUNT
	};

private:
	char* m_keyNames[KEY_COUNT];
	int m_keyTimes[KEY_COUNT];

	bool m_keyDown[KEY_COUNT];
	bool m_keyUp[KEY_COUNT];


	bool m_textMode;
	int m_lastTextUpdate;

public:
	CBind();
	~CBind();

	void SysKeyPress(int key);
	void SysKeyRelease(int key);

	void IsKeyPressed(int key);
	void IsKeyReleased(int key);
	void IsKeyDown(int key);

	void Bind(int key, char* cmd);
	void UnBind(int key);

	char* GetKeyName(int key);

	void EnterTextMode();
	void ExitTextMode();
	char GetKey();
};

#endif //_BIND_H_